// 统一处理table的数据和请求处理
import { ref, reactive, unref } from "vue";
import type { Ref } from "vue";

// api 必传： 比如 api.admin.getProductCategoryList
// queryParams 可选 : 比如  api.admin.getProductCategoryList需要的参数
function useProduct<
    P,
    R extends {
        children: any,
        description: string,
        icon: string,
        id: number,
        keywords: string,
        level: number,
        name: string,
        navStatus: number,
        parentId: number,
        productCount: number,
        productUnit: string,
        showStatus: number,
        sort: number
    }
>(api: (data?: P) => Promise<R>, queryParams?: P) {
    // 获取data的列表数据
    let productData: Ref<R["children"]> = ref([]);
    async function getproductData() {
        // console.log(queryParams); // 传过来的queryParams 已经变成 ref 类型
        // 定义一个普通的对象 ，遍历queryParams并将每一个key和value赋值给这个对象，得到一个新对象
        let normalQueryParams = {} as P;
        if (typeof queryParams === "object") {
            for (let key in queryParams) {
                // console.log(key);
                // console.log(unref(queryParams[key]));
                // unref 可以直接将响应式转为普通数据
                normalQueryParams[key] = unref(queryParams[key]);
            }
        }
        // console.log(normalQueryParams);
        // 发请求
        let result = await api({
            ...normalQueryParams,
        });
        // console.log(result);
        productData.value = result;
        // console.log(productData.value);
    }
    return {
        getproductData,
        productData,
    };
}

export default useProduct;
